package easycloud.ecs.sync;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.commons.lang.builder.ToStringBuilder;

import easycloud.ecs.common.domain.Item.ITEM_STATUS;
import easycloud.ecs.provider.model.IStorageObjectMetadata;

public class Knowledge {

	private Map<String, IStorageObjectMetadata> metadatas = new HashMap<String, IStorageObjectMetadata>();

	public List<IStorageObjectMetadata> getConflictItems() {
		List<IStorageObjectMetadata> localItems = new ArrayList<IStorageObjectMetadata>();
		for (IStorageObjectMetadata metadata : metadatas.values()) {
			if (metadata.getItem().getStatus() == ITEM_STATUS.CONFLICT) {
				localItems.add(metadata);
			}
		}
		return localItems;
	}

	public List<IStorageObjectMetadata> getLocalItems() {
		List<IStorageObjectMetadata> localItems = new ArrayList<IStorageObjectMetadata>();
		for (IStorageObjectMetadata metadata : metadatas.values()) {
			if (metadata.getItem().getStatus() == ITEM_STATUS.LOCAL_NEW) {
				localItems.add(metadata);
			} else if (metadata.getItem().getStatus() == ITEM_STATUS.LOCAL_UPDATE) {
				localItems.add(metadata);
			} else if (metadata.getItem().getStatus() == ITEM_STATUS.LOCAL_DELETE) {
				localItems.add(metadata);
			}
		}
		return localItems;
	}

	public Map<String, IStorageObjectMetadata> getMetadatas() {
		return metadatas;
	}

	public List<IStorageObjectMetadata> getRemoteItems() {
		List<IStorageObjectMetadata> remoteItems = new ArrayList<IStorageObjectMetadata>();
		for (IStorageObjectMetadata metadata : metadatas.values()) {
			if (metadata.getItem().getStatus() == ITEM_STATUS.REMOTE_NEW) {
				remoteItems.add(metadata);
			} else if (metadata.getItem().getStatus() == ITEM_STATUS.REMOTE_UPDATE) {
				remoteItems.add(metadata);
			} else if (metadata.getItem().getStatus() == ITEM_STATUS.REMOTE_DELETE) {
				remoteItems.add(metadata);
			}
		}
		return remoteItems;
	}

	public void setMetadatas(Map<String, IStorageObjectMetadata> metadatas) {
		this.metadatas = metadatas;
	}

	@Override
	public String toString() {
		return ToStringBuilder.reflectionToString(this);
	}
}
